package com.suning.service;

import com.suning.entity.EsBasePojo;

import java.util.List;
import java.util.Map;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 *
 * @author 16080951(林健)
 * @Copyright (c) 2016 苏宁软件技术有限公司 版权所有
 * @see [相关类/方法]（可选）
 * @since [产品 /模块版本] （可选）
 */
public interface ElasticSearchService {

    /**
     * 查询所有结果
     *
     * @param <T>    the type parameter
     * @param jsonId 查询esmap中的jsonId。
     * @param clazz  最终转换的对象。
     * @param params 需要替换的参数。
     * @return list 返回封装好的数据结构。
     * @throws Exception the exception
     */
    <T extends EsBasePojo> List<T> queryForList(String jsonId, Class<T> clazz, Map<String, Object> params) throws Exception;

    /**
     * 按分页查询
     *
     * @param <T>    the type parameter
     * @param jsonId 查询esmap中的jsonId。
     * @param clazz  最终转换的对象。
     * @param params 需要替换的参数。
     * @return list 返回封装好的数据结构。
     * @throws Exception the exception
     */
    <T extends EsBasePojo> List<T> queryForPage(String jsonId, Class<T> clazz, Map<String, Object> params)throws Exception;;

    /**
     * 根据条件删除
     *
     * @param <T>    the type parameter
     * @param jsonId 查询esmap中的jsonId。
     * @param clazz  最终转换的对象。
     * @param params 需要替换的参数。
     * @return list 返回封装好的数据结构。
     * @throws Exception the exception
     */
    <T extends EsBasePojo> boolean deleteByQuery(String jsonId, Class<T> clazz, Map params) throws Exception;

    /**
     * 更新数据（_id,_type,_index)必传。
     *
     * @param <T>       the type parameter
     * @param date      需要插入或更新的数据
     * @param indexName 索引名
     * @param type      类型
     * @return true:成功，false失败
     * @throws Exception the exception
     */
    <T extends EsBasePojo> boolean insertOrUpdate(List<T> date,String indexName,String type) throws Exception;

}
